package com.duobaoyu.dby.supply.biz.client.boundary.order.bean.bo;

import com.duobaoyu.dby.supply.db.entity.extend.OrderProductParamExtendInfo;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

/**
 * @author chenms
 * @date 2023/10/7 2:57 PM
 */
@Data
public class OrderProductBO implements Serializable {
	private static final long serialVersionUID = -5545043444736055554L;
	/**
     * 供应链订单号
     */
    private String orderSn;
    /**
     * 渠道编码
     */
    private String channelCode;
    /**
     * 商品类型 :real->实物商品；call->话费快充商品；coupon->卡券；recharge->直充商品；call_slow->话费慢充商品；electricity_fees_slow->电费慢充商品
     */
    private String productType;
    /**
     * 仓储类型,1:保税区邮、2:香港直邮、3:国内、4:法国直邮、5:澳门直邮、6:欧洲直邮、7:澳洲直邮、8:韩国直邮、9:美国直邮、10:日本直邮、11:德国直邮、12:新西兰直邮
     */
    private Integer repositoryType;
    /**
     * 商品编码
     */
    private String productCode;
    /**
     * 渠道商品编码
     */
    private String channelProductCode;
    /**
     * SKU编码
     */
    private String skuCode;
    /**
     * 渠道SKU编码
     */
    private String channelSkuCode;
    /**
     * 渠道specId
     */
    private String channelSpecId;
    /**
     * 渠道供应商Id
     */
    private String channelSupplierId;
    /**
     * 三级类目ID
     */
    private Long thirdClassifyId;
    /**
     * 三级类目名称
     */
    private String thirdClassifyName;
    /**
     * SKU名称
     */
    private String skuName;
    /**
     * SKU展示图
     */
    private String skuPic;
    /**
     * 商品数量
     */
    private Integer skuNum;
    /**
     * 商品单位
     */
    private String unit;
    /**
     * 销售属性
     */
    private String saleAttributes;
    /**
     * 原价(面额)
     */
    private BigDecimal originalPrice;
    /**
     * 渠道未税价
     */
    private BigDecimal channelNakedPrice;
	/**
	 * 平台销售价格
	 */
	private BigDecimal platformSellPrice;
	/**
	 * 平台销售价格
	 */
	private BigDecimal platformSellAmount;
	/**
	 * 平台成本价格
	 */
	private BigDecimal platformPrice;
	/**
	 * 平台成本价格
	 */
	private BigDecimal platformAmount;
    /**
     * 渠道商品实际支付金额
     */
    private BigDecimal channelPayAmount;
    /**
     * 到账金额
     */
    private BigDecimal actualAmount;
    /**
     * 税率
     */
    private BigDecimal skuTaxRate;
    /**
     * 品牌ID
     */
    private Long brandId;
    /**
     * 品牌名称
     */
    private String brandName;
    /**
     * 1对内，2不对内
     */
    private Integer insideStatus;
	/**
	 * 是否需要校验身份证
	 */
	private Boolean needVerifyIdentity;
    /**
     * 退款/拒收商品数量
     */
    private Integer channelReturnSkuNum;

    /**
     * 退运费金额(平安渠道)
     */
    private BigDecimal channelReturnFreightAmount;

    /**
     * 参数扩展
     */
    private OrderExtendParam paramExtend;

    /**
     * 响应结果扩展
     */
    private OrderProductResultExtendInfo resultExtend;


    /**
     * 参数扩展
     */
    @Data
    public static class OrderExtendParam implements Serializable {
        private static final long serialVersionUID = -1335288687297722996L;

        /**
         * 油卡类型,0:中石化、1:中石油
         */
        private Integer oilCardType;

        /**
         * 电费信息
         */
        @JsonInclude(JsonInclude.Include.NON_NULL)
        private OrderProductParamExtendInfo.ElectricityFees electricityFees;

        /**
         * 手机运营商
         */
        @JsonInclude(JsonInclude.Include.NON_NULL)
        private OrderProductParamExtendInfo.PhoneOperator phoneOperator;
        /**
         * 商品阶梯价格
         */
        @JsonInclude(JsonInclude.Include.NON_NULL)
        private List<OrderProductParamExtendInfo.Price> tieredPrice;

        @Data
        @Builder
        @AllArgsConstructor
        @NoArgsConstructor
        @JsonInclude(JsonInclude.Include.NON_NULL)
        public static class Price {
            /**
             * 包装规格
             */
            private String batchPackageNum;
            /**
             * 规格起发量
             */
            private String batchStartNum;
            /**
             * 规格单价
             */
            private BigDecimal batchSellPrice;
            /**
             * 税率
             */
            private String taxRate;
        }

        /**
         * 电费充值参数
         */
        @Data
        public static class ElectricityFees implements Serializable {
            private static final long serialVersionUID = 7008712035521022795L;
            /**
             * 电费运营商类型
             */
            private String operator;
            /**
             * 电费 省编码
             */
            private String provinceCode;
            /**
             * 电费 省名称
             */
            private String provinceName;
            /**
             * 电费 市编码
             */
            private String cityCode;
            /**
             * 电费 市名称
             */
            private String cityName;
            /**
             * 充值电费证件号 （身份证后六位 / 营业执照后六位 / 银行卡后六位
             */
            private String certificatesNo;

            /**
             * 充值电费证件型 1身份证后六位 2营业执照后六位 3银行卡后六位
             */
            private Integer certificatesType;

        }

        /**
         * 手机运营商参数
         */
        @Data
        public static class PhoneOperator implements Serializable {
            /**
             * 渠道商品编码
             */
            private String channelProductCode;
            /**
             * 充值流量值（M）
             */
            private Integer flowValue;
            /**
             * 运营商
             */
            private String operatorName;
            /**
             * 运营商类型 1:移动 2:电信 3:联通
             */
            private Integer operatorType;
            /**
             * 归属地省名称
             */
            private String provinceName;
            /**
             * 归属地城市名称
             */
            private String cityName;

        }
    }


    /**
     * 渠道响应结果扩展
     */
    @Data
    public static class OrderProductResultExtendInfo implements Serializable {

        /**
         * 卡券集合
         */
        @JsonInclude(JsonInclude.Include.NON_NULL)
        private List<CouponInfo> couponInfos;

        /**
         * 卡券信息
         */
        @Data
        @JsonInclude(JsonInclude.Include.NON_NULL)
        public static class CouponInfo implements Serializable{
            /**
             * 卡券生成码规则，0：二维码；1：条形码；2：条形码和二维码；3：卡券URL地址；4：只包含密码；5：卡号和密码；6：图片
             */
            private Integer cardType;
            /**
             * 卡券唯一码（卡密无此参数）
             */
            private String uniqueCode;
            /**
             * 卡号（卡券无此参数）
             */
            private String cardNo;
            /**
             * 卡密（卡券无此参数）
             */
            private String cardPwd;
            /**
             * 卡券URL地址
             */
            private String cardLink;
            /**
             * 卡券生成时间
             */
            private Long cardCreateTime;
            /**
             * 有效期
             */
            private Long effectiveTime;
        }
    }

}
